home *** CD-ROM | disk | FTP | other *** search
- static char calctime_prog[] = "@(#)Zeit +/- Zahl";
- static char calctime_ver[] = "@(#)v1.00/kr ; 10.06.91";
- /* calctime Rechnen mit Zeiten
- **
- ** Autor Klaus Rath
- **
- ** Deklaration char *calctime(char *zeit, long abstand, char *erg);
- **
- ** Übergabe Die Funktion erwartet einen String in einem der folgenden
- ** Formate :
- ** hh:mm[:ss] -- Formate 1,2
- ** hh.mm[.ss] -- Formate 3,4
- ** hhmm[ss] -- Datenbankformate 5,6
- ** sowie einen long-Wert, dessen Vorzeichen die gewünschte
- ** Operation festlegt.
- ** Rückgabe Zeiger auf ein char-Array erg, daß ausreichend dimensioniert
- ** sein muß - calctime gibt immer im langen Format zurück.
- ** Für deutsches und amerikanisches Format werden also 9,
- ** fürs DDB/4-Format 7 Zeichen benötigt!
- **
- ** Anmerkungen
- **
- ** Änderungen 1.00 ; 10.06.91
- ** - Erste Version
- */
-
- #include <stdio.h>
- #include <string.h>
- #include <time.h>
- #ifdef __TURBOC__
- #define ANSI
- #define MSDOS
- #include <stdlib.h>
- #include <sys\types.h>
- #else
- #include <sys/types.h>
- #endif
- #include "datum.h"
-
- #ifdef ANSI
- char *calctime(char *tstring, long abstand, char *erg)
- #else
- char *calctime(tstring,abstand,erg)
- char *tstring;
- long abstand;
- char *erg;
- #endif
- {
- char stunden_s[3],minuten_s[3],sekunden_s[3];
- long stunden, minuten, sekunden;
- long gesamt;
- int format;
- int zaehler;
-
- gesamt = 0L;
-
- /* Überprüfung auf Gültigkeit bzw. Format :
- */
- format = checktime(tstring);
- if ( !format ) {
- return(NULL);
- }
-
- /* Format überprüfen und umkopieren :
- */
- if ( format >= 1 && format <= 4 ) {
- stunden_s[0] = tstring[0];
- stunden_s[1] = tstring[1];
- stunden_s[2] = '\0';
- minuten_s[0] = tstring[3];
- minuten_s[1] = tstring[4];
- minuten_s[2] = '\0';
- if ( format == 2 || format == 4 ) {
- sekunden_s[0] = tstring[6];
- sekunden_s[1] = tstring[7];
- sekunden_s[2] = '\0';
- }
- else {
- sekunden_s[0] = '0';
- sekunden_s[1] = '0';
- sekunden_s[2] = '\0';
- }
- } /* ENDE: Formate 1-4 */
- else if ( format == 5 || format == 6 ) { /* Datenbank-Format */
- stunden_s[0] = tstring[0];
- stunden_s[1] = tstring[1];
- stunden_s[2] = '\0';
- minuten_s[0] = tstring[2];
- minuten_s[1] = tstring[3];
- minuten_s[2] = '\0';
- if ( format == 6 ) {
- sekunden_s[0] = tstring[4];
- sekunden_s[1] = tstring[5];
- sekunden_s[2] = '\0';
- }
- else {
- sekunden_s[0] = '0';
- sekunden_s[1] = '0';
- sekunden_s[2] = '\0';
- }
- } /* ENDE: Datenbankformat */
- /* ENDE:if(Formatprüfung und Kopierung) */
-
- /* Konvertierung und Summation :
- */
- stunden = atol(stunden_s);
- minuten = atol(minuten_s);
- gesamt = (stunden*60L) + minuten;
-
- /* Rückgabeformat auf das passende Langformat einstellen :
- */
- switch ( format ) {
-
- case TI_HM_D:
- case TI_HMS_D:
- format = TI_HMS_D;
- break;
- case TI_HM_P:
- case TI_HMS_P:
- format = TI_HMS_P;
- break;
- case TI_HM_DB:
- case TI_HMS_DB:
- format = TI_HMS_DB;
- break;
- default: format = TI_HMS_D;
- }
-
- /* Aktion ermitteln :
- */
- if ( abstand == 0 ) {
- cnvttime(tstring,format,erg);
- return(erg);
- }
- else if ( abstand > 0 ) { /* Addition */
- gesamt += abstand;
- if ( gesamt > TI_MAX_MIN )
- strcpy(erg,TI_MAX_VAL);
- else
- strcpy(erg,mk_timestr(gesamt,'m',format));
- return(erg);
- } /* ENDE: abstand > 0 */
- else if ( abstand < 0 ) { /* Subtraktion */
- abstand = abstand*(-1L);
- gesamt -= abstand;
- if ( gesamt < 0L )
- gesamt = 0L;
- strcpy(erg,mk_timestr(gesamt,'m',format));
- return(erg);
- } /* ENDE: abstand */
-
- return(NULL);
- } /* ENDE: calctime() */
-